/**
 ************************************************************************************************************
 * Class managing strings
 ************************************************************************************************************
 * @file RBString.h
 ************************************************************************************************************/

#ifndef SRC_RBCOMMON_RBSTRING_H
#define SRC_RBCOMMON_RBSTRING_H

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBString.h)
#endif

/************************************************************************************************************
 * Includes
 ************************************************************************************************************/

#include "RBMemoryManagerOff.h"
#include <stdarg.h>
#include "RBMemoryManagerOn.h"
#include <string>


/************************************************************************************************************
 * Forward declarations
 ************************************************************************************************************/
typedef std::string RBString;


/************************************************************************************************************
 * Classes
 ************************************************************************************************************/

namespace RBStringTools
{
    inline RBString FormatString(const char* szFormat, ...)
    {
        char szBuff[1024];
        va_list arg;
        va_start(arg, szFormat);
        vsnprintf_s(szBuff, 1024, sizeof(szBuff), szFormat, arg);
        va_end(arg);
        return RBString(szBuff);
    }

    inline RBString GetLeafName(const RBString& strFullPath)
    {
        size_t iSlashPos = strFullPath.find_last_of("/\\");
        return (iSlashPos == RBString::npos) ? strFullPath : strFullPath.substr(iSlashPos+1);
    }

    inline RBString GetDirName(const RBString& strFullPath)
    {
        size_t iSlashPos = strFullPath.find_last_of("/\\");
        return (iSlashPos == RBString::npos) ? "" : strFullPath.substr(0, iSlashPos);
    }

    // can be used to remove ext: "" + true
    void replace_extension(RBString* str, const char* dst_ext, bool ext_has_dot = false);
}

/************************************************************************************************************/

#endif //SRC_RBCOMMON_RBSTRING_H

